package com.hgd.security.evp.biz.websocket.hgd.handler;

import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;

/**
 * @author By 尚
 * @date 2019/4/8 11:56
 */
public abstract class AbstractHGDChannelInboundHandler<TextWebSocketFrame> extends SimpleChannelInboundHandler<TextWebSocketFrame> {

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {
    }

    /**
     * 向所有客户端发送消息
     * @param msg 待发送的消息内容
     */
    public abstract void channelWriteAndFlush(String msg);

    /**
     * 向指定客户端发送消息
     * @param msg 待发送的消息内容
     */
    public abstract void channelWriteAndFlush(String msg, String channelId);

    /**
     * 添加一个Channel到ChannelGroup中，这意味着在子类中需要有一个ChannelGroup的成员属性，诸如：
     * private static ChannelGroup clients =
     *         new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
     * @param channel
     */
    protected abstract void addChannel(Channel channel);

    /**
     * 当将一个Channel添加到添加一个Channel到ChannelGroup中以后，需要再维护一个该Channel的ChannelId与Channel的Map集合
     * 这意味着在子类中需要有一个该Map集合成员属性，诸如：private static Map<String,Channel> channelIdChannelMap=
     *         new HashMap<>();
     */
    protected abstract void addChannelIdChannelMap(String channelId, Channel channel);
}
